As more and more services are becoming available for small or mobile devices, the number of applications running in a single device has increased significantly. Usually, a small or mobile device is used mostly for certain specific applications, while being equipped with general purpose computing capabilities. For example, it is common to find a mobile phone device that also runs a browser application, a gaming application, and a music player application, etc. On the other hand, a mobile video player device may run a gaming application and/or an email application in addition to a video application. Normally, multiple running applications in the same device compete with each other by sharing the same memory space embedded inside the device.
Although the density of memory devices continues to increase, memory capacities in small or mobile devices are still very limited as their physical sizes shrink at the same time. Traditionally, virtual memory technologies are employed to allow multiple applications to share a limited RAM (random access memory) using a secondary memory with a much larger capacity. However, the capacity in a secondary memory, such as a flash memory, for a small or mobile device may also be very limited.
Usually, a system monitors memory usage by multiple running applications to ensure availability of a required capacity of free memory. In some systems, when memory usage reaches a critical level, the system takes memory management actions to increase the size of free memory, such as activating a garbage collection procedure to obtain allocated memories from applications which are no longer running. The system may also target a selected application, such as by simply killing the application. Selecting a target application is usually based on the size or age of an application. As a result, the larger the size, the more likely an application may be killed when memory usage is tight.
However, the priority among running applications in a small mobile device may not correspond to the size or age of an application. In addition, killing a running application may result in adverse user experiences on the device as a whole. Furthermore, relying on memory reduction by a single running application to reduce overall memory usage may not be effective enough or may disrupt the running state of the application. Therefore, existing memory management approaches fall short of addressing the challenges of serving multiple running applications in a small or mobile device with limited memory capacity.